package com.wzh.priority;

import java.util.ArrayList;
import java.util.List;

import com.wzh.priority.bean.TestA;
import com.wzh.priority.bean.TestB;

/**
 * 测试Java中运算符的优先级<br>
 * 原码 反码 补码 的定义
 * ~ 运算符的意思 所有位置取反 （操作系统中数字都是使用补码进行表示的）
 * @author wzh
 *
 */
public class Main {

	/**
	 * java 中所有的运算符 优先级由上到下依次递减,结合顺序 <br>
	 * 
	 *  () []								从左到右 <br>
	 *  ! + - ~ ++ --					从左到右 <br>
	 *  * % /								从左到右 <br>
	 *  + -								从左到右 <br>
	 *  << >> >>>								从左到右 <br>
	 *  <   <=  >   >=  instanceof								从左到右 <br>
	 *  == !=								从左到右 <br>
	 *  &								从左到右 <br>
	 *  ^								从左到右 <br>
	 *  |								从左到右 <br>
	 *  &&								从左到右 <br>
	 *  ||								从左到右 <br>
	 *  ?:								从右到左 <br>
	 * = 								从右到左 <br>
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// ！&&  !<&&
//		if (!true&&true) {
//			System.out.println("=========");
//		}
//		int i=1;
//		int j=~i;
//		int k=-1;
//		int m=~k;
//		System.out.println(j);
//		System.out.println(m);
//		System.out.println(Integer.MAX_VALUE+"  "+Integer.MIN_VALUE);
//		Main testMain=new Main();
//		testMain.name();
//		testMain.isChild();
		int i=(64|32&~64);
		System.out.println("i="+i);
	}
	
	/**
	 * 原码，反码，补码
	 * 正数的 三个相同
	 * 负数
	 * 原码 
	 * 反码 除了符号位 取反
	 * 补码 反码+1
	 */
	//1的原码 0000 0000 0000 0000 0000 0000 0000 0001
	//~操作   1111 1111 1111 1111 1111 1111 1111 1110
	//因为第一位是1 所以代表的是负数
	//所以反码为
	//			  1111 1111 1111 1111 1111 1111 1111 1101
	//原码为	  1000 0000 0000 0000 0000 0000 0000 0010
	//所以代表是的-2
	public void yfb(){
		
	}
	/**
	 * 测试<br>
	 * << 二进制左移位运算最低位补0 <br>
	 * 	eg  0001  <<1		0010 <br>
	 * >> 二进制右移位运算带符号最高位补0<br>
	 * eg  0001  >>1		0000 <br>
	 * 		 1001  >>1		0100 <br>
	 * >>>二进制右移位运算不带符号位<br>
	 * eg 0001	 >>>1		0000<br>
	 * 		1001	 >>>1		1000<br>
	 */
	public void name() {
		int i=1;
		int j=i<<1;
		System.out.println(j+" i="+i);
		for (int j2 = 0; j2 < 5; j2++) {
			j=j<<1;
			System.out.println(j);
		}
		int k=i>>1;
		System.out.println(k+"=====");
		
	}
	/**
	 * instanceof
	 */
	public void isChild(){
		List<String> list=new ArrayList<String>();
		boolean flag=(list instanceof Object);
		System.out.println("isChild===========================start");
		System.out.println(flag+"=");
		TestA a=new TestA();
		TestB b=new TestB();
		if(b instanceof TestA){
			System.out.println("TestA is TestB 的父类");
		}else {
			System.out.println("TestA is not TestB 的父类");
		}
		if (a instanceof TestA) {
			System.out.println("a 属于 TestA ====");
		}else {
			System.out.println("a 不属于 TestA");
		}
		System.out.println("isChild===========================end");
	}

}
